package com.qf.controller;

import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.UserServiceImpl;
import com.qf.utils.Constants;
import com.qf.utils.StrUtils;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * @author fy
 * @version V1.0
 * @Project day41
 * @Package com.qf.controller
 * @Description:
 * @Date 2022/5/23 14:17
 */
@WebServlet("/user")
public class UserController extends BaseServlet{

    /**
     * 用户注册，校验用户名是否可用
     * @param request
     * @param response
     */
    public void check(HttpServletRequest request,HttpServletResponse response) throws Exception{
        //1：接受用户名参数
        String username = request.getParameter("username");
        //2：调用service，到数据库中查询这个用户是否存在，如果存在，这个用户名不可用，如果不存在，则可用
        UserService userService = new UserServiceImpl();
        boolean check = userService.check(username);
        //3：将是否可用信息返回给页面
        if (check){
            //用户名可用
            response.getWriter().write(Constants.NOT_HAS_USER);
        }else {
            //用户名不可用
            response.getWriter().write(Constants.HAS_USER);
        }
    }

    /**
     * 消费者用户登录
     * @return
     */
    public String login(HttpServletRequest request, HttpServletResponse response){
        //1:获取用户名参数
        String username = request.getParameter("username");
        //2:获取用户密码参数
        String password = request.getParameter("password");

        //3：获取用户验证码参数
        String code = request.getParameter("code");
        //4：获取用户是否要自动登录参数
        String auto = request.getParameter("auto");

        //5：判断用户名，密码，验证码不为空，如果重定向到登陆页面
        if (!StrUtils.empty(username)||!StrUtils.empty(password)||!StrUtils.empty(code)){
            //跳转到登录页面
            request.setAttribute("msg", "用户名，密码，验证码不可以为空");
            return "forward:/login.jsp";
        }
        //6:校验验证码是否正确，不正确重定向到登录页面重新登陆
        String sessionCode = (String) request.getSession().getAttribute("code");
        if (!code.equalsIgnoreCase(sessionCode)){
            request.setAttribute("userName", username);
            request.setAttribute("password", password);
            request.setAttribute("msg", "验证码错误");
            return "forward:/login.jsp";
        }
        //7：调用service完成用户名密码的校验
        UserService userService = new UserServiceImpl();
        User user = userService.login(username, password);

        //8：判断用户名，密码是否错误，如果错误，返回提示信息
        if (user == null){
            request.setAttribute("userName", username);
            request.setAttribute("password", password);
            request.setAttribute("msg", "用户名或者密码错误");
            //跳转到登录页面
            return "forward:/login.jsp";
        }
        //9：登录成功，将用户信息放入tomcat的session会话中携带
        request.getSession().setAttribute("loginUser", user);
        //10：判断用户是否要自动登录，进行自动登录设置
        if ("on".equals(auto)){
            Cookie cookie = new Cookie(Constants.AUTO_NAME,user.getUsername());//自动登录cookie，常量中有定义
            //设置cookie保存路径
            cookie.setPath("/");
            //设置cookie生存时间
            cookie.setMaxAge(60*60*24*14);
            //通过响应讲cookie数据写回到浏览器当中保存
            response.addCookie(cookie);

        }
        //11：跳转到首页
        return "redirect:/goods?method=index";

    }

    /**
     * 新用户注册
     * @param request
     * @param response
     * @return
     */
    public String register(HttpServletRequest request,HttpServletResponse response) throws Exception{
        //1：获取页面传入的所有参数,key就是页面传输框的name属性，value就是传输框的值
        Map<String,String[]> paramterMap = request.getParameterMap();
        //2：将参数封装成User对象
        User user = new User();
        //利用beanUtils工具类，讲map中的数据全部自动set到user对象中
        //使用要求：user对象的属性名必须和input框中的name属性一致，实体类必须实现Serializable序列化接口

        BeanUtils.populate(user,paramterMap);
        //3：调用service，将用户对象保存到mysql数据库中的用户表中
        UserService userService = new UserServiceImpl();
        int count = userService.createUser(user);
        //4：跳转到注册成的的页面
        if (count>0){
            //注册成功
            return "redirect:/registerSuccess.jsp";
        }else {
            //注册失败
            return "redirect:/register.jsp";
        }

    }
}
